package com.spring.annotation.factory;
 
import com.spring.annotation.bean.Color;
import org.springframework.beans.factory.FactoryBean;

/**
 * FactoryBean bean工厂
 *      给容器注册组件的方法
 *
 * 使用：
 *      第一步、实现FactoryBean接口——public class DemoFactoryBean implements FactoryBean<Color> {}
 *      第二步、通过@Bean注解 加入到spring的ioc容器中
 *
 * 注意：
 *      1. 通过getBean("demoFactoryBean")方法获取的实际类型不是工厂类，而是传入的泛型
 *      2. 要获取工厂bean本身需要加"&"。例如getBean("&demoFactoryBean")
 */
// 注意：传入泛型为Bean返回的类型
public class DemoFactoryBean implements FactoryBean<Color> {
    //返回一个Color对象，这个对象会添加到IOC容器中
    @Override
    public Color getObject() throws Exception {
        return new Color();
    }
 
    //
    @Override
    public Class<?> getObjectType() {
        return Color.class;
    }
 
    //判断是否是单实例？
    //true这个bean是单例的，在IOC容器中保存一份
    //false 多实例的，每次获取都会创建一个新的bean
    @Override
    public boolean isSingleton() {
        return true;//单实例
    }
}